<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="generator" content="Docusaurus v2.0.0-alpha.65">
<title data-react-helmet="true">1.3 源码结构 | Fur</title><meta data-react-helmet="true" name="docsearch:version" content="current,latest"><meta data-react-helmet="true" name="twitter:card" content="summary_large_image"><meta data-react-helmet="true" property="og:title" content="1.3 源码结构 | Fur"><meta data-react-helmet="true" name="description" content="1.2.1 源码架构"><meta data-react-helmet="true" property="og:description" content="1.2.1 源码架构"><meta data-react-helmet="true" property="og:url" content="https://furos.cn/docs/source"><link data-react-helmet="true" rel="shortcut icon" href="/img/favicon.ico"><link data-react-helmet="true" rel="canonical" href="https://furos.cn/docs/source"><link rel="stylesheet" href="/styles.8aef5b7b.css">
<link rel="preload" href="/styles.8352e18a.js" as="script">
<link rel="preload" href="/runtime~main.98e14d7d.js" as="script">
<link rel="preload" href="/main.04e1b7d6.js" as="script">
<link rel="preload" href="/1.72c59440.js" as="script">
<link rel="preload" href="/2.a2e0b0a9.js" as="script">
<link rel="preload" href="/3.054f69af.js" as="script">
<link rel="preload" href="/1be78505.da78ff7d.js" as="script">
<link rel="preload" href="/85.0018927c.js" as="script">
<link rel="preload" href="/f976f453.e1be0e0e.js" as="script">
<link rel="preload" href="/17896441.9aece880.js" as="script">
<link rel="preload" href="/34420422.a5153b6e.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><div aria-label="Navigation bar toggle" class="navbar__toggle" role="button" tabindex="0"><svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewBox="0 0 30 30" role="img" focusable="false"><title>Menu</title><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></div><a class="navbar__brand" href="/"><img class="navbar__logo" src="/img/logo.png" alt="Fur Logo"><strong class="navbar__title">Fur</strong></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/docs/">Next</a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/docs">文档</a><a class="navbar__item navbar__link" href="/blog">博客</a><a href="https://chinadot.net" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">社区</a></div><div class="navbar__items navbar__items--right"><a href="https://space.bilibili.com/695987967" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">视频</a><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">工具</a><ul class="dropdown__menu"><li><a target="_blank" rel="noopener noreferrer" class="dropdown__link" position="left">代码生成器</a></li></ul></div><a href="https://gitee.com/monksoul/Fur/board" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">看板</a><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">仓库</a><ul class="dropdown__menu"><li><a href="https://gitee.com/monksoul/Fur" target="_blank" rel="noopener noreferrer" class="dropdown__link" position="left">Gitee</a></li><li><a href="https://github.com/MonkSoul/Fur" target="_blank" rel="noopener noreferrer" class="dropdown__link" position="left">GitHub</a></li></ul></div><div class="react-toggle react-toggle--disabled displayOnlyInLargeViewport_2aTZ"><div class="react-toggle-track"><div class="react-toggle-track-check"><span class="toggle_BsTx">🌜</span></div><div class="react-toggle-track-x"><span class="toggle_BsTx">🌞</span></div></div><div class="react-toggle-thumb"></div><input type="checkbox" disabled="" aria-label="Dark mode toggle" class="react-toggle-screenreader-only"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div><div class="navbar-sidebar"><div class="navbar-sidebar__brand"><a class="navbar__brand" href="/"><img class="navbar__logo" src="/img/logo.png" alt="Fur Logo"><strong class="navbar__title">Fur</strong></a></div><div class="navbar-sidebar__items"><div class="menu"><ul class="menu__list"><li class="menu__list-item"><a target="_blank" rel="noopener noreferrer" class="menu__link">Versions</a></li><li class="menu__list-item"><a aria-current="page" class="menu__link navbar__link--active" href="/docs">文档</a></li><li class="menu__list-item"><a class="menu__link" href="/blog">博客</a></li><li class="menu__list-item"><a href="https://chinadot.net" target="_blank" rel="noopener noreferrer" class="menu__link">社区</a></li><li class="menu__list-item"><a href="https://space.bilibili.com/695987967" target="_blank" rel="noopener noreferrer" class="menu__link">视频</a></li><li class="menu__list-item"><a target="_blank" rel="noopener noreferrer" class="menu__link menu__link--sublist">工具</a><ul class="menu__list"><li class="menu__list-item"><a target="_blank" rel="noopener noreferrer" class="menu__link" position="left">代码生成器</a></li></ul></li><li class="menu__list-item"><a href="https://gitee.com/monksoul/Fur/board" target="_blank" rel="noopener noreferrer" class="menu__link">看板</a></li><li class="menu__list-item"><a target="_blank" rel="noopener noreferrer" class="menu__link menu__link--sublist">仓库</a><ul class="menu__list"><li class="menu__list-item"><a href="https://gitee.com/monksoul/Fur" target="_blank" rel="noopener noreferrer" class="menu__link" position="left">Gitee</a></li><li class="menu__list-item"><a href="https://github.com/MonkSoul/Fur" target="_blank" rel="noopener noreferrer" class="menu__link" position="left">GitHub</a></li></ul></li></ul></div></div></div></nav><div class="main-wrapper"><div class="docPage_2gpo"><div class="docSidebarContainer_3_JD" role="complementary"><div class="sidebar_2urC"><div class="menu menu--responsive menu_5FrY"><button aria-label="Open Menu" aria-haspopup="true" class="button button--secondary button--sm menu__button" type="button"><svg aria-label="Menu" class="sidebarMenuIcon_Dm3K" xmlns="http://www.w3.org/2000/svg" height="24" width="24" viewBox="0 0 32 32" role="img" focusable="false"><title>Menu</title><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><ul class="menu__list"><li class="menu__list-item"><a class="menu__link menu__link--sublist menu__link--active" href="#!">1. 框架介绍</a><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" tabindex="0" href="/docs/">1.1 介绍</a></li><li class="menu__list-item"><a class="menu__link" tabindex="0" href="/docs/author">1.2 关于作者</a></li><li class="menu__list-item"><a aria-current="page" class="menu__link menu__link--active active" tabindex="0" href="/docs/source">1.3 源码结构</a></li><li class="menu__list-item"><a class="menu__link" tabindex="0" href="/docs/reference">1.4 项目引用</a></li></ul></li><li class="menu__list-item"><a class="menu__link" href="/docs/get-start">2. 一分钟入门</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/appstartup">3. 应用启动</a></li><li class="menu__list-item menu__list-item--collapsed"><a class="menu__link menu__link--sublist" href="#!">4. 配置与选项</a><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/configuration">4.1 配置</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/options">4.2 选项</a></li></ul></li><li class="menu__list-item"><a class="menu__link" href="/docs/dynamic-api-controller">5. 动态 WebAPI</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/specification-document">6. 规范化接口文档</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/friendly-exception">7. 友好异常处理</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/data-validation">8. 数据校验</a></li><li class="menu__list-item menu__list-item--collapsed"><a class="menu__link menu__link--sublist" href="#!">9. 数据库操作指南</a><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/dbcontext">9.1 数据库上下文</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/dbcontext-locator">9.2 数据库上下文定位器</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/entity">9.3 数据库实体</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/dbcontext-repository">9.4 仓储模式</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/dbcontext-add">9.5 新增操作</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/dbcontext-update">9.6 更新操作</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/dbcontext-add-or-update">9.7 新增或更新操作</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/dbcontext-delete">9.8 删除操作</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/dbcontext-batch">9.9 批量操作</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/dbcontext-query">9.10 查询操作</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/dbcontext-hight-query">9.11 高级查询操作</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/dbcontext-view">9.12 视图操作</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/dbcontext-proc">9.13 存储过程操作</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/dbcontext-function">9.14 函数操作</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/dbcontext-sql">9.15 Sql 操作</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/dbcontext-sql-template">9.16 Sql 模板</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/dbcontext-sql-proxy">9.17 Sql 高级代理</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/dbcontext-multi-database">9.18 多数据库操作</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/dbcontext-db-first">9.19 数据库生成模型</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/dbcontext-code-first">9.20 模型生成数据库</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/dbcontext-seed-data">9.21 实体种子数据</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/dbcontext-audit">9.22 审计日志</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/dbcontext-filter">9.23 实体/全局查询筛选器</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/dbcontext-Interceptor">9.24 数据库操作拦截器</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/tran">9.25 事务和工作单元</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/dbcontext-read-write">9.26 读写分离/主从复制</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/split-db">9.27 分表分库</a></li></ul></li><li class="menu__list-item"><a class="menu__link" href="/docs/saas">10. SaaS 多租户</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/dependency-injection">11. 依赖注入/控制反转</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/object-mapper">12. 对象数据映射</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/cache">13. 分布式缓存</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/auth-control">14. 安全鉴权</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/cors">15. CORS 跨域</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/view-engine">16. 视图引擎</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/local-language">17. 多语言处理</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/event-bus">18. 事件总线</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/logging">19. 日志记录</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/http">20. 网络请求</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/process-service">21. 进程服务</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/job">22. 任务调度</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/signalr">23. 即时通讯</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/grpc">24. Grpc 服务</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/deploy">25. 托管部署</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/devops">26. 持续部署集成</a></li><li class="menu__list-item menu__list-item--collapsed"><a class="menu__link menu__link--sublist" href="#!">27. 测试指南</a><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/unittest">27.1 单元测试</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/performance">27.2 性能测试</a></li></ul></li><li class="menu__list-item"><a class="menu__link" href="/docs/contribute">28. 贡献指南</a></li><li class="menu__list-item menu__list-item--collapsed"><a class="menu__link menu__link--sublist" href="#!">29. 常见问题</a><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/answer">29.1 常见问题</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/errors">29.2 常见错误</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/gooduse">29.3 最佳实践</a></li></ul></li></ul></div></div></div><main class="docMainContainer_3EyW"><div class="container padding-vert--lg docItemWrapper_1EkI"><div class="row"><div class="col docItemCol_2ASc"><div class="docItemContainer_3QWW"><article><header><h1 class="docTitle_1Lrw">1.3 源码结构</h1></header><div class="markdown"><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2cZh" id="121-源码架构"></a>1.2.1 源码架构<a aria-hidden="true" tabindex="-1" class="hash-link" href="#121-源码架构" title="Direct link to heading">#</a></h2><p><code>Fur</code> 创建采用多层分层设计，主要设计是 <code>自动抽象工厂</code> 和 <code>DDD 领域驱动设计</code> 相结合。</p><p><code>Fur</code> 框架项目结构如下：</p><ul><li><code>Fur.Tests</code>：测试层</li><li><code>Solution Items</code>：解决方案配置层</li><li><code>Fur</code>：框架核心层</li><li><code>Fur.Application</code>：业务应用层</li><li><code>Fur.Core</code>：仓储实体层</li><li><code>Fur.Database.Migrations</code>：架构维护层</li><li><code>Fur.EntityFramework.Core</code>：EF Core 配置层</li><li><code>Fur.Web.Core</code>：Web 核心层</li><li><code>Fur.Web.Entry</code>：Web 入口层/启动层</li></ul><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2cZh" id="122-furtests-测试层"></a>1.2.2 <code>Fur.Tests</code> 测试层<a aria-hidden="true" tabindex="-1" class="hash-link" href="#122-furtests-测试层" title="Direct link to heading">#</a></h2><p><code>Fur.Tests</code> 是项目的测试层，目前还未整理完成。</p><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2cZh" id="123-solution-items-解决方案配置层"></a>1.2.3 <code>Solution Items</code> 解决方案配置层<a aria-hidden="true" tabindex="-1" class="hash-link" href="#123-solution-items-解决方案配置层" title="Direct link to heading">#</a></h2><p>源码结构：</p><div class="mdxCodeBlock_1XEh"><div class="codeBlockContent_1u-d"><button type="button" aria-label="Copy code to clipboard" class="copyButton_10dd">Copy</button><div tabindex="0" class="prism-code language-undefined codeBlock_3iAC"><div class="codeBlockLines_b7E3" style="color:#bfc7d5;background-color:#292d3e"><div class="token-line" style="color:#bfc7d5"><span class="token plain">Solution Items</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">└.editorconfig</span></div></div></div></div></div><p><code>Solution Items</code> 是用来配置解决方案中一些全局配置的，如每个文件的顶部版权信息，如：</p><div class="mdxCodeBlock_1XEh"><div class="codeBlockContent_1u-d"><button type="button" aria-label="Copy code to clipboard" class="copyButton_10dd">Copy</button><div tabindex="0" class="prism-code language-cs codeBlock_3iAC"><div class="codeBlockLines_b7E3" style="color:#bfc7d5;background-color:#292d3e"><div class="token-line" style="color:#bfc7d5"><span class="token plain">// -----------------------------------------------------------------------------</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">// Fur 是 .NET 5 平台下企业应用开发最佳实践框架。</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">// Copyright © 2020 Fur, Baiqian Co.,Ltd.</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">//</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">// 框架名称：Fur</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">// 框架作者：百小僧</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">// 框架版本：1.0.0</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">// 源码地址：Gitee：https://gitee.com/monksoul/Fur</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">//                 Github：https://github.com/monksoul/Fur</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">// 开源协议：Apache-2.0（http://www.apache.org/licenses/LICENSE-2.0）</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">// -----------------------------------------------------------------------------</span></div></div></div></div></div><p>相关配置在 <code>.editorconfig</code> 最后面一行，如：</p><div class="mdxCodeBlock_1XEh"><div class="codeBlockContent_1u-d"><button type="button" aria-label="Copy code to clipboard" class="copyButton_10dd">Copy</button><div tabindex="0" class="prism-code language-cs codeBlock_3iAC"><div class="codeBlockLines_b7E3" style="color:#bfc7d5;background-color:#292d3e"><div class="token-line" style="color:#bfc7d5"><span class="token plain"># Rules in this file were initially inferred by Visual Studio IntelliCode from the D:\MONK\Fur\framework codebase based on best match to current usage at 2020/9/2</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"># You can modify the rules from these initially generated values to suit your own policies</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"># You can learn more about editorconfig here: https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">[*.cs]</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#Core editorconfig formatting - indentation</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#use soft tabs (spaces) for indentation</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">indent_style = space</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#Formatting - new line options</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#place else statements on a new line</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">csharp_new_line_before_else = true</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#require members of anonymous types to be on separate lines</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">csharp_new_line_before_members_in_anonymous_types = true</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#require members of object intializers to be on separate lines</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">csharp_new_line_before_members_in_object_initializers = true</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#require braces to be on a new line for accessors, methods, control_blocks, types, lambdas, object_collection_array_initializers, anonymous_types, and properties (also known as &quot;Allman&quot; style)</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">csharp_new_line_before_open_brace = accessors, methods, control_blocks, types, lambdas, object_collection_array_initializers, anonymous_types, properties</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#Formatting - organize using options</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#do not place System.* using directives before other using directives</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">dotnet_sort_system_directives_first = false</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#Formatting - spacing options</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#require a space before the colon for bases or interfaces in a type declaration</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">csharp_space_after_colon_in_inheritance_clause = true</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#require a space after a keyword in a control flow statement such as a for loop</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">csharp_space_after_keywords_in_control_flow_statements = true</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#require a space before the colon for bases or interfaces in a type declaration</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">csharp_space_before_colon_in_inheritance_clause = true</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#remove space within empty argument list parentheses</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">csharp_space_between_method_call_empty_parameter_list_parentheses = false</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#remove space between method call name and opening parenthesis</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">csharp_space_between_method_call_name_and_opening_parenthesis = false</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#do not place space characters after the opening parenthesis and before the closing parenthesis of a method call</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">csharp_space_between_method_call_parameter_list_parentheses = false</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#remove space within empty parameter list parentheses for a method declaration</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">csharp_space_between_method_declaration_empty_parameter_list_parentheses = false</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#place a space character after the opening parenthesis and before the closing parenthesis of a method declaration parameter list.</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">csharp_space_between_method_declaration_parameter_list_parentheses = false</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#Formatting - wrapping options</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#leave code block on single line</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">csharp_preserve_single_line_blocks = true</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#leave statements and member declarations on the same line</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">csharp_preserve_single_line_statements = true</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#Style - Code block preferences</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#prefer no curly braces if allowed</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">csharp_prefer_braces = false:suggestion</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#Style - expression bodied member options</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#prefer expression-bodied members for accessors</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">csharp_style_expression_bodied_accessors = true:suggestion</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#prefer block bodies for constructors</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">csharp_style_expression_bodied_constructors = false:suggestion</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#prefer block bodies for methods</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">csharp_style_expression_bodied_methods = false:suggestion</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#prefer expression-bodied members for properties</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">csharp_style_expression_bodied_properties = true:suggestion</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#Style - expression level options</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#prefer out variables to be declared inline in the argument list of a method call when possible</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">csharp_style_inlined_variable_declaration = true:suggestion</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#prefer the language keyword for member access expressions, instead of the type name, for types that have a keyword to represent them</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">dotnet_style_predefined_type_for_member_access = true:suggestion</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#Style - Expression-level  preferences</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#prefer default over default(T)</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">csharp_prefer_simple_default_expression = true:suggestion</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#prefer objects to be initialized using object initializers when possible</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">dotnet_style_object_initializer = true:suggestion</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#prefer inferred anonymous type member names</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">dotnet_style_prefer_inferred_anonymous_type_member_names = false:suggestion</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#prefer inferred tuple element names</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">dotnet_style_prefer_inferred_tuple_names = true:suggestion</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#Style - implicit and explicit types</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#prefer var over explicit type in all cases, unless overridden by another code style rule</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">csharp_style_var_elsewhere = true:suggestion</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#prefer var is used to declare variables with built-in system types such as int</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">csharp_style_var_for_built_in_types = true:suggestion</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#prefer var when the type is already mentioned on the right-hand side of a declaration expression</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">csharp_style_var_when_type_is_apparent = true:suggestion</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#Style - language keyword and framework type options</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#prefer the language keyword for local variables, method parameters, and class members, instead of the type name, for types that have a keyword to represent them</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#Style - Miscellaneous preferences</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#prefer local functions over anonymous functions</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">csharp_style_pattern_local_over_anonymous_function = true:suggestion</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#Style - modifier options</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#prefer accessibility modifiers to be declared except for public interface members. This will currently not differ from always and will act as future proofing for if C# adds default interface methods.</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">dotnet_style_require_accessibility_modifiers = for_non_interface_members:suggestion</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#Style - Modifier preferences</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#when this rule is set to a list of modifiers, prefer the specified ordering.</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">csharp_preferred_modifier_order = public,private,internal,protected,virtual,static,async,abstract,readonly,sealed,override:suggestion</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#Style - qualification options</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#prefer fields not to be prefaced with this. or Me. in Visual Basic</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">dotnet_style_qualification_for_field = false:suggestion</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#prefer methods not to be prefaced with this. or Me. in Visual Basic</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">dotnet_style_qualification_for_method = false:suggestion</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">#prefer properties not to be prefaced with this. or Me. in Visual Basic</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">dotnet_style_qualification_for_property = false:suggestion</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"># Add file header</span></div><div class="token-line docusaurus-highlight-code-line" style="color:#bfc7d5"><span class="token plain">file_header_template = -----------------------------------------------------------------------------\nFur 是 .NET 5 平台下企业应用开发最佳实践框架。\nCopyright © 2020 Fur, Baiqian Co.,Ltd.\n\n框架名称：Fur\n框架作者：百小僧\n框架版本：1.0.0\n源码地址：Gitee：https://gitee.com/monksoul/Fur \n                Github：https://github.com/monksoul/Fur \n开源协议：Apache-2.0（http://www.apache.org/licenses/LICENSE-2.0）\n-----------------------------------------------------------------------------</span></div></div></div></div></div><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2cZh" id="124-fur-核心层"></a>1.2.4 <code>Fur</code> 核心层<a aria-hidden="true" tabindex="-1" class="hash-link" href="#124-fur-核心层" title="Direct link to heading">#</a></h2><p><code>Fur</code> 核心层是 <code>Fur</code> 框架的中心，也是 <code>Fur</code> 能够支撑起来的必备层。</p><p>源码结构：</p><div class="mdxCodeBlock_1XEh"><div class="codeBlockContent_1u-d"><button type="button" aria-label="Copy code to clipboard" class="copyButton_10dd">Copy</button><div tabindex="0" class="prism-code language-undefined codeBlock_3iAC"><div class="codeBlockLines_b7E3" style="color:#bfc7d5;background-color:#292d3e"><div class="token-line" style="color:#bfc7d5"><span class="token plain">Fur</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">├─Fur.csproj</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">├─Fur.csproj.user</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">├─FurStartup.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">├─ViewEngine</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|     ├─IViewEngine.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|     ├─ViewEngine.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|     ├─Templates</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|     |     ├─IViewEngineCompiledTemplate.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|     |     ├─IViewEngineTemplate.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|     |     ├─ViewEngineCompiledTemplate.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|     |     └ViewEngineTemplate.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|     ├─Options</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|     |    └ViewEngineCompilationOptions.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|     ├─Models</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|     |   └AnonymousTypeWrapper.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|     ├─Exceptions</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|     |     ├─ViewEngineCompilationException.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|     |     └ViewEngineException.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|     ├─Compilations</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|     |      ├─IViewEngineCompilationOptionsBuilder.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|     |      └ViewEngineCompilationOptionsBuilder.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">├─UnifyResult</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|      ├─Providers</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|      |     ├─IUnifyResultProvider.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|      |     └RESTfulResultProvider.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|      ├─Models</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|      |   └RESTfulResult.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|      ├─Filters</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|      |    └SuccessUnifyResultFilter.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|      ├─Extensions</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|      |     └UnifyResultServiceCollectionExtensions.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">├─SpecificationDocument</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|           ├─Options</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|           |    └SpecificationDocumentSettingsOptions.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|           ├─Models</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|           |   ├─GroupOrder.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|           |   ├─SpecificationOpenApiInfo.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|           |   ├─SpecificationOpenApiSecurityRequirementItem.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|           |   └SpecificationOpenApiSecurityScheme.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|           ├─Extensions</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|           |     ├─SpecificationDocumentApplicationBuilderExtensions.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|           |     └SpecificationDocumentServiceCollectionExtensions.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|           ├─Builders</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|           |    └SpecificationDocumentBuilder.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|           ├─Assets</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|           |   └index-mini-profiler.html</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">├─ObjectMapper</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|      ├─Extensions</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|      |     └ObjectMapperServiceCollectionExtensions.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|      ├─Dependencies</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|      |      └IObjectMapper.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">├─LinqBuilder</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|      ├─Visitors</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|      |    └ParameterReplaceExpressionVisitor.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|      ├─Extensions</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|      |     └LinqExtensions.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|      ├─Builders</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|      |    └LinqExpression.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">├─FriendlyException</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|         ├─Oops.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|         ├─Providers</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|         |     └IErrorCodeTypeProvider.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|         ├─Options</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|         |    └ErrorCodeMessageSettingsOptions.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|         ├─Models</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|         |   └MethodIfException.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|         ├─Filters</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|         |    └FriendlyExceptionFilter.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|         ├─Extensions</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|         |     └FriendlyExceptionServiceCollectionExtensions.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|         ├─Attributes</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|         |     ├─ErrorCodeItemMetadataAttribute.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|         |     ├─ErrorCodeTypeAttribute.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|         |     └IfExceptionAttribute.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">├─DynamicApiController</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          ├─Penetrates.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          ├─Providers</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          |     └DynamicApiControllerFeatureProvider.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          ├─Options</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          |    └DynamicApiControllerSettingsOptions.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          ├─Models</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          |   └ParameterRouteTemplate.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          ├─Extensions</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          |     └DynamicApiControllerServiceCollectionExtensions.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          ├─Enums</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          |   └ApiSeats.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          ├─Dependencies</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          |      └IDynamicApiController.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          ├─Conventions</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          |      └DynamicApiControllerApplicationModelConvention.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          ├─Attributes</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          |     ├─ApiDescriptionSettingsAttribute.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          |     ├─ApiSeatAttribute.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          |     └DynamicApiControllerAttribute.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">├─DependencyInjection</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          ├─Options</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          |    └DependencyInjectionSettingsOptions.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          ├─Models</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          |   └ExternalService.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          ├─Extensions</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          |     └DependencyInjectionServiceCollectionExtensions.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          ├─Enums</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          |   ├─InjectionActions.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          |   ├─InjectionPatterns.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          |   └RegisterType.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          ├─Dependencies</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          |      ├─IPrivateDependency.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          |      ├─IScoped.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          |      ├─ISingleton.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          |      ├─ITransient.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          |      ├─Proxies</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          |      |    └IDispatchProxy.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          ├─Attributes</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          |     ├─InjectionAttribute.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          |     └SkipScanAttribute.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">├─DataValidation</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|       ├─Validators</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|       |     └DataValidator.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|       ├─Providers</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|       |     └IValidationMessageTypeProvider.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|       ├─Options</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|       |    └ValidationTypeMessageSettingsOptions.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|       ├─Models</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|       |   └DataValidationResult.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|       ├─Filters</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|       |    └DataValidationFilter.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|       ├─Extensions</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|       |     ├─DataValidationExtensions.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|       |     └DataValidationServiceCollectionExtensions.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|       ├─Enums</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|       |   ├─ValidationPattern.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|       |   └ValidationTypes.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|       ├─Attributes</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|       |     ├─DataValidationAttribute.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|       |     ├─NonValidationAttribute.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|       |     ├─ValidationItemMetadataAttribute.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|       |     ├─ValidationMessageAttribute.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|       |     ├─ValidationMessageTypeAttribute.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|       |     └ValidationTypeAttribute.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">├─DataEncryption</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|       ├─AESEncryption.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|       ├─DESCEncryption.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|       └MD5Encryption.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">├─DatabaseAccessor</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        ├─UnitOfWork</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |     ├─Filters</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |     |    └UnitOfWorkFilter.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |     ├─Attributes</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |     |     ├─NonTransactAttribute.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |     |     └UnitOfWorkAttribute.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        ├─Repositories</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |      ├─EFCoreRepository.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |      ├─IMSRepository.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |      ├─IRepository.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |      ├─ISqlRepository.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |      ├─MSRepository.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |      ├─SqlRepository.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |      ├─Implantations</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |      |       ├─DeletableRepository.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |      |       ├─InsertableRepository.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |      |       ├─OperableRepository.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |      |       ├─ReadableRepository.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |      |       ├─SqlExecutableRepository.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |      |       ├─SqlReaderRepository.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |      |       ├─UpdateableRepository.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |      |       └WritableRepository.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |      ├─Dependencies</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |      |      ├─IDeletableRepository.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |      |      ├─IInsertableRepository.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |      |      ├─IOperableRepository.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |      |      ├─IReadableRepository.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |      |      ├─IRepositoryDependency.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |      |      ├─ISqlExecutableRepository.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |      |      ├─ISqlReaderRepository.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |      |      ├─IUpdateableRepository.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |      |      └IWritableRepository.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        ├─Pools</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |   ├─DbContextPool.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |   └IDbContextPool.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        ├─MultiTenants</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |      ├─Locators</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |      |    └MultiTenantDbContextLocator.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |      ├─Enums</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |      |   └MultiTenantOptions.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |      ├─Entities</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |      |    └Tenant.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |      ├─Dependencies</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |      |      ├─IMultiTenantOnDatabase.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |      |      ├─IMultiTenantOnSchema.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |      |      ├─IMultiTenantOnTable.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |      |      └IPrivateMultiTenant.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        ├─Models</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |   ├─DbProvider.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |   ├─PagedList.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |   ├─ProcedureOutputResult.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |   ├─ProcedureOutputValue.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |   ├─SqlTemplate.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |   └SqlTemplateParameter.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        ├─Locators</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |    ├─IDbContextLocator.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |    └MasterDbContextLocator.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        ├─Interceptors</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |      ├─DbContextSaveChangesInterceptor.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |      ├─SqlCommandProfilerInterceptor.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |      └SqlConnectionProfilerInterceptor.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        ├─Helpers</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |    └DbHelpers.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        ├─Extensions</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |     ├─DatabaseAccessorServiceCollectionExtensions.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |     ├─PagedQueryableExtensions.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |     ├─Repositories</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |     |      ├─IEntityExtensions.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |     |      ├─IEntityWithDbContextLocatorExtensions.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |     |      └SqlExtensions.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |     ├─DatabaseProvider</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |     |        ├─DatabaseProviderServiceCollectionExtensions.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |     |        └Penetrates.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |     ├─DatabaseFacade</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |     |       ├─DbDataConvertExtensions.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |     |       ├─DbObjectExtensions.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |     |       └SqlAdoNetExtensions.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        ├─Enums</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |   ├─DbFunctionType.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |   ├─EFCoreErrorCodes.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |   └ManualOptions.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        ├─Entities</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |    ├─Dependencies</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |    |      ├─Entity.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |    |      ├─EntityBase.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |    |      ├─EntityNotKey.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |    |      ├─IEntity.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |    |      └IEntityNotKey.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |    ├─Configures</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |    |     ├─IEntitySeedData.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |    |     ├─IEntityTypeBuilder.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |    |     ├─IModelBuilderFilter.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |    |     └IPrivateModelBuilder.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |    ├─Attributes</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |    |     ├─FakeDeleteAttribute.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |    |     ├─NonAutomaticAttribute.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |    |     └QueryableFunctionAttribute.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        ├─DynamicModels</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |       ├─DynamicModelCacheKeyFactory.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |       └IEntityMutableTable.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        ├─Contexts</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |    ├─AppDbContext.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |    ├─Builders</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |    |    ├─AppDbContextBuilder.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |    |    ├─Models</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |    |    |   └DbContextCorrelationType.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |    ├─Attributes</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |    |     └AppDbContextAttribute.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        ├─Attributes</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |     └DbParameterAttribute.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        ├─Advances</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |    ├─Proxies</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |    |    └SqlDispatchProxy.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |    ├─Models</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |    |   └SqlProxyMethod.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |    ├─Dependencies</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |    |      └ISqlDispatchProxy.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |    ├─Attributes</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |    |     ├─SqlExecuteAttribute.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |    |     ├─SqlFunctionAttribute.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |    |     ├─SqlProcedureAttribute.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |    |     ├─Basics</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |    |     |   ├─SqlObjectProxyAttribute.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |    |     |   ├─SqlProxyAttribute.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|        |    |     |   └SqlSentenceProxyAttribute.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">├─CorsAccessor</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|      ├─Options</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|      |    └CorsAccessorSettingsOptions.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|      ├─Extensions</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|      |     ├─CorsAccessorApplicationBuilderExtensions.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|      |     └CorsAccessorServiceCollectionExtensions.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">├─ConfigurableOptions</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          ├─Options</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          |    └IConfigurableOptions.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          ├─Extensions</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          |     └ConfigurableOptionsServiceCollectionExtensions.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          ├─Attributes</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|          |     └OptionsSettingsAttribute.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">├─Authorization</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|       ├─Penetrates.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|       ├─Requirements</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|       |      └AuthorizePolicyRequirement.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|       ├─Providers</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|       |     └AuthorizePolicyProvider.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|       ├─Options</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|       |    └JWTSettingsOptions.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|       ├─Handlers</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|       |    └AuthorizePolicyHandler.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|       ├─Extensions</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|       |     └PolicyAuthorizationServiceCollectionExtensions.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|       ├─Attributes</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|       |     └AuthorizePolicyAttribute.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">├─App</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|  ├─App.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|  ├─Startups</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|  |    ├─AppStartup.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|  |    └HostingStartup.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|  ├─Options</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|  |    └AppSettingsOptions.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|  ├─Filters</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|  |    └StartupFilter.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|  ├─Extensions</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|  |     ├─AppApplicationBuilderExtensions.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|  |     ├─AppServiceCollectionExtensions.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|  |     ├─WebHostBuilderExtensions.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|  |     ├─Types</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|  |     |   └ObjectExtensions.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|  ├─Attributes</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|  |     └AppStartupAttribute.cs</span></div></div></div></div></div><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2cZh" id="125-furapplication-业务应用层"></a>1.2.5 <code>Fur.Application</code> 业务应用层<a aria-hidden="true" tabindex="-1" class="hash-link" href="#125-furapplication-业务应用层" title="Direct link to heading">#</a></h2><p><code>Fur.Application</code> 业务应用层是最常用的层，几乎所有的业务代码都在这个层中编写。</p><p>源码结构：</p><div class="mdxCodeBlock_1XEh"><div class="codeBlockContent_1u-d"><button type="button" aria-label="Copy code to clipboard" class="copyButton_10dd">Copy</button><div tabindex="0" class="prism-code language-cs codeBlock_3iAC"><div class="codeBlockLines_b7E3" style="color:#bfc7d5;background-color:#292d3e"><div class="token-line" style="color:#bfc7d5"><span class="token plain">Fur.Application</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">├─Fur.Application.Core.csproj</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">├─Fur.Application.Core.xml</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">└FurApplicationStartup.cs</span></div></div></div></div></div><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2cZh" id="126-furcore-仓储实体层"></a>1.2.6 <code>Fur.Core</code> 仓储实体层<a aria-hidden="true" tabindex="-1" class="hash-link" href="#126-furcore-仓储实体层" title="Direct link to heading">#</a></h2><p><code>Fur.Core</code> 主要是存储自定义仓储和定义实体的层。</p><p>源码结构：</p><div class="mdxCodeBlock_1XEh"><div class="codeBlockContent_1u-d"><button type="button" aria-label="Copy code to clipboard" class="copyButton_10dd">Copy</button><div tabindex="0" class="prism-code language-cs codeBlock_3iAC"><div class="codeBlockLines_b7E3" style="color:#bfc7d5;background-color:#292d3e"><div class="token-line" style="color:#bfc7d5"><span class="token plain">Fur.Core</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">├─Fur.Core.csproj</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">└FurCoreStartup.cs</span></div></div></div></div></div><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2cZh" id="127-furdatabasemigrations-数据库架构维护层"></a>1.2.7 <code>Fur.Database.Migrations</code> 数据库架构维护层<a aria-hidden="true" tabindex="-1" class="hash-link" href="#127-furdatabasemigrations-数据库架构维护层" title="Direct link to heading">#</a></h2><p><code>Fur.Database.Migrations</code> 主要是用来存放 <code>Database First</code> 和 <code>Code First</code> 生成的维护文件。</p><p>源码结构：</p><div class="mdxCodeBlock_1XEh"><div class="codeBlockContent_1u-d"><button type="button" aria-label="Copy code to clipboard" class="copyButton_10dd">Copy</button><div tabindex="0" class="prism-code language-cs codeBlock_3iAC"><div class="codeBlockLines_b7E3" style="color:#bfc7d5;background-color:#292d3e"><div class="token-line" style="color:#bfc7d5"><span class="token plain">Fur.Database.Migrations</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">└Fur.Database.Migrations.csproj</span></div></div></div></div></div><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2cZh" id="128-furentityframeworkcore-数据库上下文配置层"></a>1.2.8 <code>Fur.EntityFramework.Core</code> 数据库上下文配置层<a aria-hidden="true" tabindex="-1" class="hash-link" href="#128-furentityframeworkcore-数据库上下文配置层" title="Direct link to heading">#</a></h2><p><code>Fur.EntityFramework.Core</code> 主要是用来配置数据库上下文和其他数据库相关配置信息的。</p><p>源码结构：</p><div class="mdxCodeBlock_1XEh"><div class="codeBlockContent_1u-d"><button type="button" aria-label="Copy code to clipboard" class="copyButton_10dd">Copy</button><div tabindex="0" class="prism-code language-cs codeBlock_3iAC"><div class="codeBlockLines_b7E3" style="color:#bfc7d5;background-color:#292d3e"><div class="token-line" style="color:#bfc7d5"><span class="token plain">Fur.EntityFramework.Core</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">└Fur.EntityFramework.Core.csproj</span></div></div></div></div></div><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2cZh" id="129-furwebcore-应用核心层"></a>1.2.9 <code>Fur.Web.Core</code> 应用核心层<a aria-hidden="true" tabindex="-1" class="hash-link" href="#129-furwebcore-应用核心层" title="Direct link to heading">#</a></h2><p><code>Fur.Web.Core</code> 主要是用来配置 Web 入口一些代码，如 <code>Filter</code>，<code>Middlewares</code> 等。</p><p>源码结构：</p><div class="mdxCodeBlock_1XEh"><div class="codeBlockContent_1u-d"><button type="button" aria-label="Copy code to clipboard" class="copyButton_10dd">Copy</button><div tabindex="0" class="prism-code language-cs codeBlock_3iAC"><div class="codeBlockLines_b7E3" style="color:#bfc7d5;background-color:#292d3e"><div class="token-line" style="color:#bfc7d5"><span class="token plain">Fur.Web.Core</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">├─Fur.Web.Core.xml</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">└FurWebCoreStartup.cs</span></div></div></div></div></div><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2cZh" id="1210-furwebentry-应用入口层"></a>1.2.10 <code>Fur.Web.Entry</code> 应用入口层<a aria-hidden="true" tabindex="-1" class="hash-link" href="#1210-furwebentry-应用入口层" title="Direct link to heading">#</a></h2><p><code>Fur.Web.Entry</code> 是我们的应用层，也就是我们的 <code>Web</code> 项目层，发布层。</p><p>源码结构：</p><div class="mdxCodeBlock_1XEh"><div class="codeBlockContent_1u-d"><button type="button" aria-label="Copy code to clipboard" class="copyButton_10dd">Copy</button><div tabindex="0" class="prism-code language-cs codeBlock_3iAC"><div class="codeBlockLines_b7E3" style="color:#bfc7d5;background-color:#292d3e"><div class="token-line" style="color:#bfc7d5"><span class="token plain">Fur.Web.Entry</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">├─appsettings.Development.json</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">├─appsettings.json</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">├─Fur.Web.Entry.csproj</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">├─Fur.Web.Entry.csproj.user</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">├─Fur.Web.Entry.xml</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">├─Program.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">├─Startup.cs</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">├─wwwroot</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|    └README.md</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">├─Properties</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">|     └launchSettings.json</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">├─Controllers</span></div></div></div></div></div></div></article><div class="margin-vert--xl"><div class="row"><div class="col"><a href="https://gitee.com/monksoul/Fur/tree/main/handbook/docs/source.mdx" target="_blank" rel="noreferrer noopener"><svg fill="currentColor" height="1.2em" width="1.2em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 40 40" style="margin-right:0.3em;vertical-align:sub"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div></div></div><div class="margin-vert--lg"><nav class="pagination-nav" aria-label="Blog list page navigation"><div class="pagination-nav__item"><a class="pagination-nav__link" href="/docs/author"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">« 1.2 关于作者</div></a></div><div class="pagination-nav__item pagination-nav__item--next"><a class="pagination-nav__link" href="/docs/reference"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">1.4 项目引用 »</div></a></div></nav></div></div></div><div class="col col--3"><div class="tableOfContents_3SO_"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#121-源码架构" class="table-of-contents__link">1.2.1 源码架构</a></li><li><a href="#122-furtests-测试层" class="table-of-contents__link">1.2.2 <code>Fur.Tests</code> 测试层</a></li><li><a href="#123-solution-items-解决方案配置层" class="table-of-contents__link">1.2.3 <code>Solution Items</code> 解决方案配置层</a></li><li><a href="#124-fur-核心层" class="table-of-contents__link">1.2.4 <code>Fur</code> 核心层</a></li><li><a href="#125-furapplication-业务应用层" class="table-of-contents__link">1.2.5 <code>Fur.Application</code> 业务应用层</a></li><li><a href="#126-furcore-仓储实体层" class="table-of-contents__link">1.2.6 <code>Fur.Core</code> 仓储实体层</a></li><li><a href="#127-furdatabasemigrations-数据库架构维护层" class="table-of-contents__link">1.2.7 <code>Fur.Database.Migrations</code> 数据库架构维护层</a></li><li><a href="#128-furentityframeworkcore-数据库上下文配置层" class="table-of-contents__link">1.2.8 <code>Fur.EntityFramework.Core</code> 数据库上下文配置层</a></li><li><a href="#129-furwebcore-应用核心层" class="table-of-contents__link">1.2.9 <code>Fur.Web.Core</code> 应用核心层</a></li><li><a href="#1210-furwebentry-应用入口层" class="table-of-contents__link">1.2.10 <code>Fur.Web.Entry</code> 应用入口层</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container"><div class="row footer__links"><div class="col footer__col"><h4 class="footer__title">文档</h4><ul class="footer__items"><li class="footer__item"><a class="footer__link-item" href="/docs/get-start">入门</a></li><li class="footer__item"><a class="footer__link-item" href="/docs">指南</a></li></ul></div><div class="col footer__col"><h4 class="footer__title">社区</h4><ul class="footer__items"><li class="footer__item"><a href="https://gitee.com/monksoul/Fur/issues" target="_blank" rel="noopener noreferrer" class="footer__link-item">讨论</a></li><li class="footer__item"><a href="https://gitee.com/monksoul/Fur/board" target="_blank" rel="noopener noreferrer" class="footer__link-item">看板</a></li></ul></div><div class="col footer__col"><h4 class="footer__title">更多</h4><ul class="footer__items"><li class="footer__item"><a class="footer__link-item" href="/blog">博客</a></li><li class="footer__item"><a href="https://gitee.com/monksoul/Fur" target="_blank" rel="noopener noreferrer" class="footer__link-item">仓库</a></li></ul></div></div><div class="text--center"><div>Copyright © 2020 Fur, Baiqian Co.,Ltd.</div></div></div></footer></div>
<script src="/styles.8352e18a.js"></script>
<script src="/runtime~main.98e14d7d.js"></script>
<script src="/main.04e1b7d6.js"></script>
<script src="/1.72c59440.js"></script>
<script src="/2.a2e0b0a9.js"></script>
<script src="/3.054f69af.js"></script>
<script src="/1be78505.da78ff7d.js"></script>
<script src="/85.0018927c.js"></script>
<script src="/f976f453.e1be0e0e.js"></script>
<script src="/17896441.9aece880.js"></script>
<script src="/34420422.a5153b6e.js"></script>
</body>
</html>